//
//  EmoticonViewModel.swift
//  01-表情键盘
//
//  Created by Apple on 15/9/30.
//  Copyright © 2015年 itcast. All rights reserved.
//

import Foundation

/// 表情视图模型
class EmoticonViewModel {
    
    /// 单例 － 目的：保证表情包的数据只被从plist加载一次
    static let sharedViewModel = EmoticonViewModel()
    
    /// 表情包数组
    lazy var packages = [EmoticonPackage]()
    
    /// 构造函数 - 创建的同时，加载数据
    private init() {
        loadEmoticons()
    }
    
    /// 加载表情
    /**
        1. 读取 emoticons.plist，知道所有的 表情包
        2. 根据 表情包中的目录名，分别加载 info.plist
        3. 创建每个表情包的模型
    */
    private func loadEmoticons() {
        // 0. 添加默认分组
        packages.append(EmoticonPackage(dict: ["group_name_cn": "最近XXX"]))
        
        // 1. 读取 emoticons.plist，提示如果路径不存在，会直接返回nil
        let path = NSBundle.mainBundle().pathForResource("emoticons.plist", ofType: nil, inDirectory: "Emoticons.bundle")!
        
        // 2. 加载字典
        let dict = NSDictionary(contentsOfFile: path)
        
        // 3. 从字典中获得 id 的数组
        // valueForKey是 KVC 的函数，能够直接将 NSArray 中需要的 key 取出建立新的数组
        let array = (dict!["packages"] as! NSArray).valueForKey("id") as! [String]
        
        // 4. 遍历 array 加载 info.plist
        for dir in array {
            // 1> 获取 info.plist 路径
            let infoPath = NSBundle.mainBundle().pathForResource("info.plist", ofType: nil, inDirectory: "Emoticons.bundle/" + dir)!
            
            // 2> 加载 plist，字典转模型
            let packageDict = NSDictionary(contentsOfFile: infoPath) as! [String: AnyObject]
            
            packages.append(EmoticonPackage(dict: packageDict))
        }
        
        print(packages)
    }
}